//package com.ruoyi.demo.task;
//
//import com.alibaba.fastjson2.JSONArray;
//import com.alibaba.fastjson2.JSONObject;
//import com.ruoyi.demo.domain.MonitorOfflineAlarmSettingsDemo;
//import com.ruoyi.demo.domain.MonitorPointDemo;
//import com.ruoyi.demo.service.*;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Component;
//import org.springframework.transaction.annotation.Transactional;
//
//import java.util.ArrayList;
//import java.util.List;
//
//
//@Component
//public class MonitorPointDemoScheduler {
//
//    @Autowired
//    JyDemoService jyService;
//    @Autowired
//    MonitorPointDemoService monitorPointService;
//
//    @Scheduled(cron = "0 */5 * * * ?")
//    @Transactional
//    public void updateMonitorStatusTask(){
//        System.out.println("--------------更新监控点：--------------");
//        String monitorListJsonStr = jyService.getChannelListWithDevice();
//        List<MonitorPointDemo> list = toMonitorList(monitorListJsonStr);
//        monitorPointService.mergeMonitorListToMonitorTable(list);
//        monitorPointService.deleteMonitorNotInList(list);
//
//        //查询离线超时报警的开关和设定时间
//        MonitorOfflineAlarmSettingsDemo monitorOfflineAlarmSettings = monitorPointService.selectMonitorOfflineAlarmSettings();
//        Integer setMinutes = monitorOfflineAlarmSettings.getSetMinutes();
//        boolean isOfflineTimeoutAlarmEnabled = monitorOfflineAlarmSettings.isOfflineTimeoutAlarmEnabled;
//        if (isOfflineTimeoutAlarmEnabled) {
//            //获取离线时间超过设定时间并且还有没发送过报警信息的所有监控点
//            List<MonitorPointDemo> monitorListThatOfflineTimeout = monitorPointService.selectMonitorsThatNeedToSendOfflineAlarm(setMinutes);
//            if (monitorListThatOfflineTimeout != null && monitorListThatOfflineTimeout.size() > 0) {
//                //报警表中新增这些监控点的离线超时报警
//                monitorPointService.insertMonitorOfflineAlarm(monitorListThatOfflineTimeout);
//                //更新这些监控点的isOfflineAlarmBeenSent(离线超时报警发送状态)为已经发送
//                monitorPointService.updateAlarmStatusAsSent(monitorListThatOfflineTimeout);
//            }
//        }
//    }
//
//
//    /**
//     * 解析将从极云获取的监控点列表的json字符串
//     */
//    private List<MonitorPointDemo> toMonitorList (String monitorListJsonStr) {
//        JSONArray monitorPointJsonArray = JSONObject.parseObject(monitorListJsonStr).getJSONObject("data").getJSONArray("data");
//        int monitorCount = monitorPointJsonArray.size();
//        ArrayList<MonitorPointDemo> res = new ArrayList<>(monitorCount);
//        for (int i = 0;  i < monitorCount; i++) {
//            JSONObject j = monitorPointJsonArray.getJSONObject(i);
//            MonitorPointDemo monitorPoint = new MonitorPointDemo();
//            monitorPoint.setIdx(j.getString("idx"))//通道序号
//                        .setUnitCode(j.getString("unitCode"))//煤矿编码
//                        .setApeId(j.getString("ape_id"))//通道国标id
//                        .setResourceType(j.getString("resource_type"))//资源类型
//                        .setSubType(j.getString("sub_type"))//通道子类型
//                        .setName(j.getString("name"))//通道名称
//                        .setModel(j.getString("model"))//通道类型
//                        .setOwnerApsId(j.getString("dev_ape_id"))//所属设备id
//                        .setOwnerApsName(j.getString("dev_name"))//所属设备name
//                        .setOwnerApsIp(j.getString("ip_addr"))//所属设备ip
//                        .setIsOnline(j.getString("is_online"))//在线状态
//                        .setIsEnabled(j.getString("enabled"))//是否启用
//                        .setOrgIndex(j.getString("org_index"))//组织id
//                        .setOrgName(j.getString("org_name"))//组织名称
//                        .setElevation(j.getDouble("altitude"))//海拔
//                        .setMaxDivision(j.getInteger("max_division"))//最大分割数
//                        .setCreateDate(j.getDate("create_time"))//创建时间
//                        .setUpdateDate(j.getDate("update_time"));//更新时间
//            res.add(monitorPoint);
//        }
//        return res;
//    }
//
//}
